package hash;

import java.util.HashSet;
import java.util.Set;


/**
 * 最长连续序列
 个* 给定一未排序的整数数组 nums ，找出数字连续的最长序列（不要求序列元素在原数组中连续）的长度。
 * 思路:先遍历数组，将数组元素放入set中，然后遍历set，如果set中存在num-1，则说明num不是连续序列的第一个元素，跳过，否则，
 * 从num开始，判断num+1是否在set中，如果存在，则num+1是连续序列中的元素，curlen+1，直到num+1不存在，则说明num是连续序列的最后一个元素，更新最长长度，返回最长
 */
public class longestConsecutive {
    public int longestConsecutive(int[] nums) {
        Set<Integer> set = new HashSet<>();
        for (int num : nums){
            set.add(num);
        }
        int maxlen = 0;
        for (int num : set){
            if(!set.contains(num-1)){
                int curlen = 1;
                while (set.contains(num+1)){
                    num++;
                    curlen++;
                }
                maxlen = Math.max(maxlen,curlen);
            }
        }
        return maxlen;
    }

    public static void main(String[] args) {
        longestConsecutive l = new longestConsecutive();
        int[] nums = {100,4,200,1,3,2};
        int res = l.longestConsecutive(nums);
        System.out.println(res);
    }
}
